package com.cskaoyan.javase.oop2._1extends._7initialization._2super;

import com.sun.xml.internal.ws.assembler.jaxws.TerminalTubeFactory;

/**
 * super关键字指向的是子类对象中，父类成员的那片区域
 * 它没有指向一个对象，只是近似地看成父类对象
 * 实际使用中，也可以把它当成父类对象地引用去使用：
 *      当然既然是对象,super只能在构造器,成员方法,构造代码块中使用
 *      不能静态方法中使用.
 *      1.可以用super点去访问成员,这一点用法和this类似
 *          一般情况下,super点可以省略
 *          特殊情况下,当父子类成员同名时,可以用super来区分同名的父类成员(变量和方法都可以)
 *      2.可以用super(实参列表)表示调用父类的构造器,这一点用法和this类似
 *
 *      综上,this指向当前对象,super(近似)指向父类对象
 * this和super的区别:
 *      1.super其实并不是指对象,它也不是一个引用,你没有办法直接打印super
 *      2.this表示当前对象自身,自己和自己没有访问权限的限制
 *          super近似表示父类对象,不再是自己人,
 *          所以super的使用要受访问权限限制
 *
 * @since 14:40
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son();
        s.sonTest(1000);
    }
}

class Father {
    int a = 10;
    int b = 20;

    public void test() {
        System.out.println("66666");
    }

    // private Father(){}
}

class Son extends Father {
    private int a = 100;

    public void test() {
        System.out.println("77777");
    }

    public void sonTest(int a) {
        System.out.println(super.a);
        System.out.println(this.a);
        System.out.println(a);
        test();
        super.test();

        System.out.println("-----------------------------");
        System.out.println(this);
        // super不能直接打印
        // System.out.println(super);
    }
}